/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package net.easoftware.code.dao;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
import javax.inject.Inject;
import javax.inject.Named;
import net.easoftware.code.beans.QueryParameter;
import net.easoftware.code.beans.facade.CargaDatosNav;
import net.easoftware.code.beans.facade.LineaNegocio;
import net.easoftware.code.beans.facade.TargetFc;
import net.easoftware.code.beans.facade.UnidadNegocio;
import net.easoftware.code.beans.jpa.TargetYear;
import net.easoftware.code.error.EaError;
import net.easoftware.code.util.Tools;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

/**
 *
 * @author waumovil-javaengineer
 */
@Named
public class CatalogosDao implements Serializable {

    @EJB
    PersistenceEjb ejb;
    @Inject
    DSManager dsManager;

    public List<CargaDatosNav> getAllCargasDatos() throws EaError {
        List<CargaDatosNav> data = new LinkedList<>();
        try {
            QueryRunner qr = new QueryRunner(dsManager.getDs());
            ResultSetHandler<List<CargaDatosNav>> handler = new BeanListHandler<>(CargaDatosNav.class);
            Object[] params = new Object[]{};
            data = qr.query("CALL getMICargas();", handler, params);
        }
        catch (SQLException ex) {
            throw new EaError("Error al obtenert cargas de datos", ex);
        }
        return data;
    }

    /**
     *
     * @return @throws EaError
     */
    public List<LineaNegocio> getAllVisibleLineasNegocio() throws EaError {
        List<net.easoftware.code.beans.jpa.LineaNegocio> r =
                (List<net.easoftware.code.beans.jpa.LineaNegocio>) ejb.doJPAQuery("select l from LineaNegocio l where l.visible=1",
                new QueryParameter[]{}, PersistenceEjb.LIST);
        List<LineaNegocio> nRs = new LinkedList<>();
        for (net.easoftware.code.beans.jpa.LineaNegocio ln : r) {
            LineaNegocio o = (LineaNegocio) Tools.cloneObject(ln, LineaNegocio.class);
            o.setVisible(ln.getVisible().equals(1));
            nRs.add(o);
        }
        return nRs;
    }

    /**
     *
     * @return @throws EaError
     */
    public List<LineaNegocio> getAllLineasNegocio() throws EaError {
        List<net.easoftware.code.beans.jpa.LineaNegocio> r = (List<net.easoftware.code.beans.jpa.LineaNegocio>) ejb.doNamedQuery("LineaNegocio.findAll", new QueryParameter[]{}, PersistenceEjb.LIST);
        List<LineaNegocio> nRs = new LinkedList<>();
        for (net.easoftware.code.beans.jpa.LineaNegocio ln : r) {
            LineaNegocio o = (LineaNegocio) Tools.cloneObject(ln, LineaNegocio.class);
            o.setVisible(ln.getVisible().equals(1));
            nRs.add(o);
        }
        return nRs;
    }

    /**
     *
     * @return @throws EaError
     */
    public List<UnidadNegocio> getAllVisibleUnidadesNegocio() throws EaError {
        List<net.easoftware.code.beans.jpa.UnidadNegocio> r = (List<net.easoftware.code.beans.jpa.UnidadNegocio>) ejb.doJPAQuery("select u from UnidadNegocio u where u.visible=1",
                new QueryParameter[]{}, PersistenceEjb.LIST);
        List<UnidadNegocio> nRs = new LinkedList<>();
        for (net.easoftware.code.beans.jpa.UnidadNegocio ln : r) {
            UnidadNegocio un = (UnidadNegocio) Tools.cloneObject(ln, UnidadNegocio.class);
            un.setNombreImagen(ln.getNombreimagen());
            un.setVisible(ln.getVisible().equals(1));
            nRs.add(un);
        }
        return nRs;
    }

    /**
     *
     * @return @throws EaError
     */
    public List<UnidadNegocio> getAllUnidadesNegocio() throws EaError {
        List<net.easoftware.code.beans.jpa.UnidadNegocio> r = (List<net.easoftware.code.beans.jpa.UnidadNegocio>) ejb.doNamedQuery("UnidadNegocio.findAll", new QueryParameter[]{}, PersistenceEjb.LIST);
        List<UnidadNegocio> nRs = new LinkedList<>();
        for (net.easoftware.code.beans.jpa.UnidadNegocio ln : r) {
            UnidadNegocio un = (UnidadNegocio) Tools.cloneObject(ln, UnidadNegocio.class);
            un.setNombreImagen(ln.getNombreimagen());
            un.setVisible(ln.getVisible().equals(1));
            nRs.add(un);
        }
        return nRs;
    }

    /**
     *
     * @return @throws EaError
     */
    public List<TargetFc> getAllTargets() throws EaError {
        List<net.easoftware.code.beans.jpa.TargetYear> r = (List<net.easoftware.code.beans.jpa.TargetYear>) ejb.doNamedQuery("TargetYear.findAll", new QueryParameter[]{}, PersistenceEjb.LIST);
        List<TargetFc> res = new LinkedList<>();
        for (net.easoftware.code.beans.jpa.TargetYear tr : r) {
            TargetFc trFc = (TargetFc) Tools.cloneObject(tr, TargetFc.class);
            trFc.setLn((LineaNegocio) Tools.cloneObject(tr.getLineaNegocio(), LineaNegocio.class));
            trFc.setUn((UnidadNegocio) Tools.cloneObject(tr.getUnidadNegocio(), UnidadNegocio.class));
            res.add(trFc);
        }
        return res;
    }

    public List getAllFromEntity(Class entity) {
        List r = (List) ejb.doNamedQuery(entity.getSimpleName() + ".findAll", new QueryParameter[]{}, PersistenceEjb.LIST);
        return r;
    }
}
